
package Trabajoentornos;
/**
 * 
 * @author Héctor
 */
public class Trabajoentornoshectorpolite {
/**
 * 
 * @param args 
 */
    
    public static void main(String[] args) {
        
        //declaro una constante de numero maximo de trabajadores
        final int MAXIMONUMERO=3;
        //creo la pariablo op para elegir la opcion en eñl menu
        int op;
        //1º Creamos una tabla de strings bidimensional
        String tabla[][]=new String[2][MAXIMONUMERO];
                
        //2ºPedimos la opcion a traves de pantalla.menu
        do {
            op=Pantalla.menu();
            switch (op){
                case 1: altausuario(tabla);//Llamada al metodo altausuario
                    break;
                case 2: 
                    if (borrar(tabla)) {//Llamada al metodo borrar
                        System.out.println ("Baja correcta");
                    }
                    break;
                case 3: modificarusuario (tabla);//Llamada al metodo modificarusuario
                    break;
                case 4: entrarusuario(tabla);//Llamada al metodo entrarusuario
                    break;
                case 5: listadousuario(tabla);//Llamada al metodo listadousuario
                    break;
            }    
        }while (op>=1 && op<=5);       
    }
    /**
     * 
     * @param tabla 
     */
    //Metodo para dar de alta a nuevos usuarios
    static void altausuario(String [][] tabla){
        int posicion;
        boolean correcto;
        String nombre;
        try{
            posicion=buscaLibre(tabla);
            //como hay hueco pido el nombre
            while (existe(tabla, nombre=Pantalla.pideCadena("Introduce el nombre: "))){
                System.out.println("Este usuario ya existe");
            }
            tabla[0][posicion]=nombre;
            do{
                try{
                    tabla[1][posicion]=pidePass();
                    correcto=true;;
                }
                catch (MiErrorcillo e) {
                    correcto=false;
                }
            }while(!correcto);
        }//del try
        catch (MiErrorcillo e){
        }//del catch
    }//del metodo
/**
 * 
 * @param tabla
 * @return
 * @throws MiErrorcillo 
 */
    //Metodo que busca espacios libres donde albergar informacion en el array
    static int buscaLibre (String[][]tabla) throws MiErrorcillo{
        for(int x=0; x<tabla[0].length; x++){
            if(tabla[0][x]==null)
                return x;
        }
        throw new MiErrorcillo ("La tabla esta llena");
    }
    /**
     * 
     * @return
     * @throws MiErrorcillo 
     */
    //Metodo para pedir contraseña y guardarla en el array
    static String pidePass()throws MiErrorcillo{
        String contraseña, recontraseña;
        contraseña=Pantalla.pideCadena("Introduce la contraseña: ");
        for(int x=0; x<contraseña.length();x++){
            if(contraseña.charAt (x)=='0'){
                throw new MiErrorcillo ("La contraseña no puede contener 0");
            }
        }
        recontraseña=Pantalla.pideCadena("Introduce la contraseña de nuevo: ");
        
        //no se pueden comparar cadenas con == por eso el metodo equals del String
        if (!contraseña.equals(recontraseña)){
            throw new MiErrorcillo ("Las contraseñas no son iguales");
        }
    return contraseña;
     }
/**
 * 
 * @param tabla 
 */
    //Metodo que muestra la tabla del array con la información
    static void listadousuario (String [][]tabla) {
            for (int i=0; i<tabla[0].length;i++) {
                if(!(tabla[0][i]==null)){
                System.out.println(tabla[0][i] + "-----" + (tabla[1][i]));
                }
        }
    }
   /**
    * 
    * @param tabla
    * @return 
    */ 
    //Metodo que permite entrar al usuario
    static boolean entrarusuario(String [][]tabla) {
        int posicion;
            try{
                posicion=buscaUsuario(tabla);
                if (passCorrecto(tabla,posicion)){
                    return true;
                }
                else {
                    System.out.println("Contraseña Incorrecta");
                }
            }
            catch  (MiErrorcillo e){}
            return false;
              
    }   
   /**
    * 
    * @param tabla
    * @return
    * @throws MiErrorcillo 
    */  
    //Metodo que muestra al usuario dentro del array
    static int buscaUsuario (String [][]tabla) throws MiErrorcillo {
        String nombres;
        nombres=Pantalla.pideCadena("Nombre: ");
        
          for (int i=0; i<tabla[0].length;i++) {
             if (nombres.equals(tabla[0][i])){
                     return i;
             }
          }
        throw new MiErrorcillo ("Este usuario no existe");
    }
    /**
     * 
     * @param tabla
     * @param posicion
     * @return 
     */        
    //Metodo que reconoce la contraseña
    static boolean passCorrecto (String [][]tabla, int posicion ){
        String contraseña=Pantalla.pideCadena("Introduce el Password ");
        return contraseña.equals(tabla[1][posicion]);
    }
    //pidepas devuelve una cadena si es correcto el password o lanza un error si el password tiene un 0 o no se repiten bien
/**
 * 
 * @param tabla
 * @return 
 */
    //Metodo para borrar informacion del array
    static boolean borrar (String [][] tabla){
        int posicion;
        try{
                posicion=buscaUsuario(tabla);
                tabla[0][posicion]=null;
                tabla[1][posicion]=null;
                return true;
            } 
        catch  (MiErrorcillo e){
        }
        return false;
    }
    /**
     * 
     * @param tabla 
     */
    
 /*   static void modificar (String [][]tabla){
        int pos;
        try{
                pos=buscaUsuario(tabla);
                tabla[1][pos]=pidePass();           
        }
        catch (MiErrorcillo e){}
    }
  */  /**
   * 
   * @param tabla 
   */
    //Metodo que permite modificar usuarios y contraseñas
       static void modificarusuario (String [][]tabla){
        int posicion;
        boolean correcto;
        try{
                posicion=buscaUsuario(tabla);
                System.out.println("Hola, " + tabla[0][posicion] + " tu pasword es " + tabla[1][posicion] + "Ahora puedes cambiarlo" );
                do{
                    try{
                        tabla[1][posicion]=pidePass();   
                        correcto=true;
                    }
                    catch (MiErrorcillo e){
                        correcto=false;
                    }
                }while (!correcto);
        }catch(MiErrorcillo e){}
    }
    /**
     * 
     * @param tabla
     * @param nombre
     * @return 
     */   
       //Metodo que reconoce usuarios ya inscritos
       public static boolean existe (String [][]tabla, String nombre){
           for (int x=0; x<tabla[0].length; x++){
                if (nombre.equals(tabla[0][x])){
                return true;       
           }
           } return false; 
       }
}
